#include <iostream>

using namespace std;

// 希尔排序函数
void shellSort(int arr[], int n) {
    int gap, i, j, temp;

    // 初始化 gap 为 n/2
    gap = n / 2;

    while (gap > 0) {
        // 对每个 gap 大小的子数组进行插入排序
        for (i = gap; i < n; i++) {
            temp = arr[i];
            j = i;

            while (j >= gap && arr[j - gap] > temp) {
                arr[j] = arr[j - gap];
                j -= gap;
            }

            arr[j] = temp;
        }

        // 缩小 gap
        gap /= 2;
    }
}

// 打印数组函数
void printArray(int arr[], int n) {
    int i;
    for (i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);

    cout << "原始数组: ";
    printArray(arr, n);

    shellSort(arr, n);

    cout << "排序后的数组: ";
    printArray(arr, n);

    return 0;
}